package es.spider.service.imp;

import java.util.ArrayList;
import java.util.List;

import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.nodes.TagNode;
import org.htmlparser.tags.HeadingTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.Span;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.SimpleNodeIterator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import es.spider.dao.Capitulo;
import es.spider.dao.Enlace;
import es.spider.service.ISearchLinkService;

@Service
@Qualifier("sySeriesService")
public class SySeriesService implements ISearchLinkService{

	@Override
	public List<Enlace> getDirectDownloadLinks(String url) {

		return null;
	}

	@Override
	public List<Enlace> getStreamingLinks(String url) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getUrlWhithLinks(String match) {
		// TODO Auto-generated method stub
		return null;
	}
	
	/**
	 * A partir de la url de la serie, se recuperan todos los capitulos 
	 * disponibles de la misma
	 * @param url
	 * @return
	 */
	public List<Capitulo> getCapitulosFromSerie (String url){
		
		List<Capitulo> lista = new ArrayList<Capitulo>();
		
		try {	
			Parser	parser = new Parser(url);
			NodeList tableList = parser.extractAllNodesThatMatch (new TagNameFilter ("TABLE"));
			SimpleNodeIterator tableIt = tableList.elements();
			while (tableIt.hasMoreNodes()){
				TableTag tableNode = (TableTag)tableIt.nextNode();
				TableRow[] rowNodes = tableNode.getRows();
				for(int i=1;i<rowNodes.length;i++){
					Capitulo capitulo = new Capitulo();
					TableColumn[] colums = rowNodes[i].getColumns();
					LinkTag urlNode = (LinkTag)colums[0].getChild(3);
					capitulo.setUrl(urlNode.getLink());
					capitulo.setTitulo(urlNode.getFirstChild().getText()+urlNode.getLinkText());
					Span idiomaSpan = (Span)colums[2].getChild(1);
					capitulo.setIdioma(idiomaSpan.getAttribute("title"));
					capitulo.setEnlaces(getLinksFromCapitulo(capitulo));
					lista.add(capitulo);
				}
			}
		}catch (Exception e) {
			e.printStackTrace();
		}
		return lista;
	}
	
	/**
	 * A partir del enlace a un capitulo recupera una lista de enlaces
	 * al contenido del mismo
	 * 
	 * @param capitulo Capitulo del que se quieren recuperar los enlaces
	 * @return Una lista con enlaces al contenido del mismo
	 */
	public List<Enlace> getLinksFromCapitulo (Capitulo capitulo){
		
		List<Enlace> lista = new ArrayList<Enlace>();
		
		try {	
			//Parser	parser = new Parser(capitulo.getUrl());
			Parser	parser = new Parser("C:\\Users\\rarba4h\\Desktop\\varios\\sy_seleccion_sr.html");
			NodeList tableList = parser.extractAllNodesThatMatch (new TagNameFilter ("TABLE"));
			SimpleNodeIterator tableIt = tableList.elements();
			while (tableIt.hasMoreNodes()){
				TableTag tableNode = (TableTag)tableIt.nextNode();
				HeadingTag hNode = (HeadingTag)tableNode.getPreviousSibling().getPreviousSibling();
				if (hNode.getStringText().contains("Online")){
					TableRow[] rowNodes = tableNode.getRows();
					for(int i=1;i<rowNodes.length;i++){
						Enlace enlace = new Enlace();
						TableColumn[] colums = rowNodes[i].getColumns();
						LinkTag urlNode = (LinkTag)colums[0].getChild(1);
						enlace.setUrl(urlNode.getLink());
						
						Span nodeServer = (Span)colums[1].getFirstChild().getFirstChild();
						String server = nodeServer.getAttribute("class");
						enlace.setServer(server.replace("server","").toUpperCase());
						
						String idioma = colums[2].getAttribute("title");
						enlace.setIdioma(idioma);
						
						Span nodeSubtitulos = (Span)colums[3].getFirstChild();
						enlace.setSubtitulos(nodeSubtitulos.getAttribute("title"));
						
						Span spanNode = (Span)colums[4].getChild(1);
						TagNode iNode = (TagNode)spanNode.getChild(1);
						enlace.setCalidad(iNode.getAttribute("class"));
						
						lista.add(getDetallesEnlace(enlace));
					}		
				}
			}
		}catch (Exception e) {
			e.printStackTrace();
		}
		return lista;
	}
	
	public Enlace getDetallesEnlace (Enlace enlace){
		
		try {	
			//Parser	parser = new Parser(enlace.getUrl());
			Parser	parser = new Parser("C:\\Users\\rarba4h\\Desktop\\varios\\sy_ultimo_sr.html");
			NodeList tableList = parser.extractAllNodesThatMatch (new TagNameFilter ("TABLE"));
			SimpleNodeIterator tableIt = tableList.elements();
			while (tableIt.hasMoreNodes()){
				TableTag tableNode = (TableTag)tableIt.nextNode();
				HeadingTag hNode = (HeadingTag)tableNode.getPreviousSibling().getPreviousSibling();
				if (hNode.getStringText().contains("Detalles")){
					TableRow[] rowNodes = tableNode.getRows();
					TableColumn[] titleColums = rowNodes[0].getColumns();
					
					enlace.setTitulo(titleColums[1].getStringText());
					
					TableColumn[] durationColums = rowNodes[3].getColumns();
					enlace.setDuracion(durationColums[1].getStringText());
					
				} else if (hNode.getStringText().contains("Enlaces")){
					TableRow[] rowNodes = tableNode.getRows();
					TableColumn[] contentColums = rowNodes[0].getColumns();
					LinkTag content = (LinkTag)contentColums[0].getFirstChild();
					enlace.setUrl_contenido(content.getLink());
				}
			}
		}catch (Exception e) {
			e.printStackTrace();
		}

		return enlace;
	}


	

}
